/*
    ts中也有泛型
    定义一个函数或类的时候,如果无法确定具体要使用哪种类型,就可以使用泛型

    <T> 就是泛型
*/
//函数使用泛型
function myFun<T>(a:T):string{

    return '';
}
function myFun1<A>(aaaa:A):A{
    
    return aaaa;
}

myFun(1);
myFun('zs');
myFun<string>('111')

interface Map<K,V>{

}

class HashMap<K,V> implements Map<K,V>{
    key:K;
    value:V;
    constructor(key:K,value:V){
        this.key = key;
        this.value = value;
    }
}


interface Person{
    name:string
}
class Student implements Person{
    name:string
    constructor(name:string){
        this.name=name;
    }
}

//<S extends Person> 泛型说明,实际传入的类型S,只能是Person类型接口的实现类
function myFun2<S extends Person>(a:S){
    console.log(a);
}

let s1= new Student('11');
myFun2(s1)